package com.gzc.just.play.last.war.common.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 消息反序列化器注解
 * 
 * 支持两种使用方式：
 * 1. 传统方式：标记在实现了MessageDeserializer接口的类上
 * 2. 声明式方式：标记在配置类上，自动生成GenericProtobufDeserializer实例
 * 
 * 声明式方式示例：
 * <pre>
 * {@code
 * @MessageDeserializer(messageId = 40961, messageType = GCToLS.AskLogin.class, module = "login-server")
 * @MessageDeserializer(messageId = 40962, messageType = GCToLS.Logout.class, module = "login-server")
 * @Component
 * public class LoginServerDeserializerConfig {
 *     // 无需实现任何方法，注解会自动生成反序列化器
 * }
 * }
 * </pre>
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MessageDeserializers.class)
public @interface MessageDeserializer {
    /**
     * 消息ID
     */
    int messageId();
    
    /**
     * 消息类型（Protobuf消息类）
     */
    Class<?> messageType();
    
    /**
     * 模块名称，用于区分不同模块的反序列化器
     */
    String module() default "";
    
    /**
     * 反序列化器名称，可选
     */
    String name() default "";
    
    /**
     * 是否启用压缩
     */
    boolean compression() default false;
    
    /**
     * 压缩类型：gzip, lz4, snappy, none
     */
    String compressionType() default "gzip";
    
    /**
     * 是否启用加密
     */
    boolean encryption() default false;
    
    /**
     * 加密类型：xor, aes, none
     */
    String encryptionType() default "none";
}